﻿using AppSeguro.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace AppSeguro.Controllers
{
    public class HomeController : Controller
    {
        //
        // GET: /Home/

        public ActionResult Index()
        {
            Usuario us = Usuario.UsuarioLogado(Session);
            if (us != null)
            {
                List<Contatos> l = new Contatos().CarregarLista(Convert.ToInt32(us.Id));
                return View(l);
            }

            return RedirectToAction("Login");
        }

        //
        // GET: /Home/Create

        public ActionResult CriarContato()
        {
            Usuario us = Usuario.UsuarioLogado(Session);
            if (us != null)
            {
                return View();
            }
            return RedirectToAction("Login");
        }

        //
        // POST: /Home/Create

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult CriarContato(Contatos c)
        {
            try
            {
                Usuario us = Usuario.UsuarioLogado(Session);
                if (us != null)
                {
                    c.IdUsuario = us.Id;
                    c.Incluir();
                    return RedirectToAction("Index");
                }
                else
                {
                    return RedirectToAction("Login");
                }
            }
            catch
            {
                return View();
            }
        }

        public ActionResult AlteraContato(int id)
        {
            Usuario us = Usuario.UsuarioLogado(Session);
            if (us != null)
            {
                Contatos c = new Contatos();
                c.Carregar(id);
                return View(c);
            }
            return RedirectToAction("Login");
        }

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult AlteraContato(int id, Contatos c)
        {
            try
            {
                Usuario us = Usuario.UsuarioLogado(Session);
                if (us != null && c.IdUsuario == us.Id)
                {
                    c.Alterar();
                    return RedirectToAction("Index");
                }
                else
                {
                    return View();
                }
            }
            catch
            {
                return View();
            }
        }

        //
        // GET: /Home/Delete/5

        public ActionResult ExcluiContato(int id)
        {
            Usuario us = Usuario.UsuarioLogado(Session);
            Contatos c = new Contatos();
            c.Carregar(id);

            if (us != null && c.IdUsuario == us.Id)
            {
                c.Excluir(id);
                return RedirectToAction("Index");
            }
            else
            {
                return View();
            }
        }

        public ActionResult Login()
        {
            return View();
        }

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Login(Usuario _us)
        {
            #region Validação do Login
            Usuario us = new Usuario();
            if (us.CarregarLogin(_us.Login, _us.Senha))
            {
                // Criptografar cada valor pela função prórpria e armazenar na sessão
                Session["Nome"] = RepositorioCriptografia.Criptografar(us.Nome);
                Session["Id"] = RepositorioCriptografia.Criptografar(us.Id.ToString());
                Session["Email"] = RepositorioCriptografia.Criptografar(us.Email);

                return RedirectToAction("Index");
            }
            else
            {
                ViewBag.Erro = "Usuário ou senha incorretos.";
                return View();
            } 
            #endregion

        }

        [AllowAnonymous]
        public ActionResult Logout()
        {
            Session.Clear();
            Session.RemoveAll();

            return RedirectToAction("Login");
        }

        public ActionResult PesquisarContato(string q)
        {
            Usuario us = Usuario.UsuarioLogado(Session);

            if (us != null)
            {
                List<Contatos> l;
                if (q == null)
                {
                    l = new List<Contatos>();
                }
                else
                {
                    l = new Contatos().BuscarPorNome(q);
                }
                return View(l);
            }
            else
            {
                return RedirectToAction("Login");
            }
        }
    }
}
